package com.oncallmng.service;

import com.oncallmng.common.PageParam;
import com.oncallmng.common.PageResult;
import com.oncallmng.model.Alert;
import com.oncallmng.model.EventLog;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 告警服务接口
 */
public interface AlertService {
    
    /**
     * 根据ID查询告警
     * @param id 告警ID
     * @return 告警信息
     */
    Alert getById(String id);
    
    /**
     * 分页查询告警列表
     * @param pageParam 分页参数
     * @param teamId 团队ID
     * @param status 状态
     * @param severity 级别
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 告警列表
     */
    PageResult<Alert> page(PageParam pageParam, String teamId, String status, String severity, LocalDate startDate, LocalDate endDate);
    
    /**
     * 创建告警
     * @param alert 告警信息
     * @return 告警ID
     */
    String create(Alert alert);
    
    /**
     * 确认告警
     * @param id 告警ID
     * @param userId 用户ID
     * @param comment 备注
     */
    void acknowledge(String id, String userId, String comment);
    
    /**
     * 解决告警
     * @param id 告警ID
     * @param userId 用户ID
     * @param comment 备注
     */
    void resolve(String id, String userId, String comment);
    
    /**
     * 转派告警
     * @param id 告警ID
     * @param userId 用户ID
     * @param assignToId 转派给用户ID
     * @param comment 备注
     */
    void assign(String id, String userId, String assignToId, String comment);
    
    /**
     * 添加评论
     * @param id 告警ID
     * @param userId 用户ID
     * @param comment 评论内容
     */
    void addComment(String id, String userId, String comment);
    
    /**
     * 获取告警处理日志
     * @param alertId 告警ID
     * @return 处理日志列表
     */
    List<EventLog> getEventLogs(String alertId);
    
    /**
     * 获取告警统计信息
     * @param teamId 团队ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计信息
     */
    Map<String, Object> getStatistics(String teamId, LocalDate startDate, LocalDate endDate);
    
    /**
     * 接收Webhook告警
     * @param source 告警源
     * @param payload 告警数据
     * @return 告警ID
     */
    String receiveWebhook(String source, String payload);
} 